home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / MATRIX04.ARJ / DEMO.C next >
Text File  |  1992-05-25  |  2KB  |  92 lines

  1. /*
  2. *-----------------------------------------------------------------------------
  3. *    file:    demo.c
  4. *    desc:    demostrate how to use Patrick's matrix toolbox
  5. *    by:    ko shu pui, patrick
  6. *    date:    24 nov 91 v0.1
  7. *    revi:    14 may 92 v0.2
  8. *        24 may 92 v0.4
  9. *    ref:
  10. *       [1] Mary L.Boas, "Mathematical Methods in the Physical Sciene,"
  11. *    John Wiley & Sons, 2nd Ed., 1983. Chap 3.
  12. *
  13. *    [2] Kendall E.Atkinson, "An Introduction to Numberical Analysis,"
  14. *    John Wiley & Sons, 1978.
  15. *
  16. *    [3] Alfred V.Aho, John E.Hopcroft, Jeffrey D.Ullman, "The Design
  17. *    and Analysis of Computer Algorithms," 1974.
  18. *
  19. *-----------------------------------------------------------------------------
  20. */
  21. #include <stdio.h>
  22. #include <time.h>
  23. #include "matrix.h"
  24.  
  25. int main()
  26. {
  27.     MATRIX    A, B, X, M;
  28.     FILE    *fp;
  29.     double    result;
  30.     time_t    t1, t2;
  31.     int    tinv, tdet, tmul;
  32.  
  33.     A = mat_creat( 10, 10, UNDEFINED );
  34.     B = mat_creat( 10, 1, UNDEFINED );
  35.  
  36.     if ((fp = fopen( "demo.dat", "r" )) == NULL)
  37.         {
  38.         fprintf( stderr, "file cannot be opened\n" );
  39.         exit (0);
  40.         }
  41.  
  42.     fgetmat( A, fp );
  43.     printf( "|- Matrix A -|\n");
  44.     mat_dumpf( A, "%+06.1f " );
  45.  
  46.     t1 = time(&t1);
  47.     result = mat_det(A);
  48.     t2 = time(&t2);
  49.     tdet = t2 - t1;
  50.     printf( "\n\nDet(A) = %f\n", result );
  51.  
  52.     printf( "|- Inv A -|\n");
  53.     t1 = time(&t1);
  54.     X = mat_inv( A );
  55.     t2 = time(&t2);
  56.     tinv = t2 - t1;
  57.  
  58.     if (X == NULL)
  59.         printf( "A is a singular matrix\n" );
  60.     else
  61.     {
  62.         mat_dumpf(X, "%+06.1f ");
  63.  
  64.         printf( "|- A x Inv A -|\n");
  65.         t1 = time(&t1);
  66.         M = mat_mul( X, A );
  67.         t2 = time(&t2);
  68.         tmul = t2 - t1;
  69.         mat_dumpf( M, "%+06.1f " );
  70.  
  71.         mat_free(M);
  72.         mat_free(X);
  73.     }
  74.  
  75.     fgetmat( B, fp );
  76.     printf( "|- Matrix B -|\n");
  77.     mat_dumpf( B, "%+06.1f " );
  78.  
  79.     printf( "|- A x B -|\n");
  80.     mat_free(mat_dumpf(mat_mul(A, B), "%+06.1f "));
  81.  
  82.     printf( "time for finding 10 x 10 matrix inversion is less than %d secs\n", tinv );
  83.     printf( "time for finding 10 x 10 matrix determinant is less than %d secs\n", tdet );
  84.     printf( "time for finding 10 x 10 matrix multiplication is less than %d secs\n", tmul );
  85.  
  86.     mat_free( A );
  87.     mat_free( B );
  88.  
  89.     fclose(fp);
  90.  
  91. }
  92.